Many kinds of data are transmitted over the Internet and other networks, including video and audio data. Data can for example be transmitted from one computer or other transmitting station to another remote computer or other receiving station. Data transmission over networks such as the Internet is frequently accomplished by packetizing the message to be transmitted—that is, by dividing the message into packets which are reassembled at the receiving end to reconstruct the original message. Packets may be lost or delayed during transmission, resulting in corruption of the message. This can be especially problematic when it occurs during real time transmission of data (such as a-during a voice over IP (VOIP) session or video conferencing).
To address the problem of packet loss and other errors, schemes have been proposed for providing additional information in transmissions of data. This additional information can be used by the receiving station to detect and/or correct errors. One such scheme is forward error-correction coding, also called channel coding (hereinafter “FEC” coding). See, e.g., Lee, A. “RTP Payload Format for Generic Forward Error Correction,” RFC 5109, December, 2007. Under this approach, an FEC packet is applied as an XOR channel code. The XOR code is used to generate the FEC packets by means of a packet mask. RFC 5109 does not specify the specific design of the packet mask. In some implementations, packet masks are defined heuristically, which can lead to reduced packet loss recovery.